#include "GestorArchivoConfiguracion.h"


using std::ifstream;

GestorArchivoConfiguracion::GestorArchivoConfiguracion(const char* nombreArchivoConfiguracion){
	ifstream infile;
	std::string linea;
	std::string aux;
	unsigned int posicion;
	std::string numeroTabla;
	size_t pos;
	// supondre q el archivo existe siempre, se abre sin problemas y esta bien formado
	infile.open(nombreArchivoConfiguracion, ifstream::in);

	if(infile.is_open()) {
		while(!infile.eof()) {
			getline(infile,linea);
			if(linea[0] == Util::TABLACHAR) {	// T1 ventas	T12 ventas	3
				pos = linea.find_first_of(Util::SEPARADORFILECONSULTA, 0);
				numeroTabla = linea.substr(1, pos - 1);
				vectorDatosTablas.push_back(linea.substr(1));
				vectorNumerosTablas.push_back(numeroTabla);
				posicion = 0;
			}
			else {
				aux = linea.substr(2);
				if(linea[0] == Util::HECHO)
					hechos[numeroTabla].push_back(aux);
				else
					dimensiones[numeroTabla].push_back(aux);

				posColumnasTablas[numeroTabla][aux] = posicion++;
			}
		}
		infile.close();
	}
}

std::vector<std::string>& GestorArchivoConfiguracion::getHechos(std::string &numeroTabla) {
	return hechos[numeroTabla];
}
std::vector<std::string>& GestorArchivoConfiguracion::getDimensiones(std::string &numeroTabla) {
	return dimensiones[numeroTabla];
}

std::vector<std::string>& GestorArchivoConfiguracion::getDatosDeTablas() {
	return vectorDatosTablas;
}

std::vector<std::string>& GestorArchivoConfiguracion::getNumerosDeTablas() {
	return vectorNumerosTablas;
}

bool GestorArchivoConfiguracion::esHecho(unsigned int numeroTabla, const std::string &valor) {
	std::vector<std::string> &v = hechos[Util::intToString(numeroTabla)];
	std::vector<std::string>::iterator it = v.begin();
	for(; it != v.end(); it++) {
		if(valor.compare(*it) == 0)
			return true;
	}
	return false;
}

unsigned int GestorArchivoConfiguracion::getPosicionTabla(unsigned int numerotabla, std::string &nombreColumna) {
	return posColumnasTablas[Util::intToString(numerotabla)][nombreColumna];
}

GestorArchivoConfiguracion::~GestorArchivoConfiguracion(){} //se destruira el map solo¿?
